/*******************************************************************************
 * FilePath    : /main.c
 * Version     : 1.0
 * Brief       :
 * Author      : AndrewHu
 * Company     : Shanghai MacroGiga Electronics CO.,Ltd
 * Email       : Hubinbo@macrogiga.com
 * Date        : 2020-04-03 15:06:14
 * LastEditors : AndrewHu
 * LastEditTime: 2021-12-29 18:23:31
 * Description :
 ******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include <Includes.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function ----------------------------------------------------------*/
/* extern --------------------------------------------------------------------*/
/*******************************************************************************
 * Function    : Key_Run
 * Brief       : 按键信息反馈处理
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-04 14:53:26
 * Description :
 ******************************************************************************/
void Key_Run(void)
{
    u8 event = Key_Scan();
    if ((event & KeyFlag_event) == 0x00)
        return;
    Key_ClearFlag();
    switch (event)
    {
    case (KeyFlag_event | KeyFlag_times | KeyFlag_down | 0x01): //按键按下1次
        // Printf_Error(1);
        break;
    case (KeyFlag_event | KeyFlag_times | 0x01): //按键按下1次后"立即"松开
        // Printf_Error(2);
        if (GetBleMode() == BLE_MODE_ADV)
        {
            //接收数据显示功能切换，串口输出
            if (BLE_GetRxDisplay())
                BLE_SetRxDisplay(0);
            else
                BLE_SetRxDisplay(1);
        }
        break;
    case (KeyFlag_event | KeyFlag_times | KeyFlag_down | 0x03): //按键连按3次
        // Printf_Error(3);
        break;
    case (KeyFlag_event | KeyFlag_times | 0x03): //按键连按3次后"立即"松开
        // Printf_Error(4);
        break;
    case (KeyFlag_event | KeyFlag_down | KeyFlag_Long): //按键长按
        if (GetBleMode() == BLE_MODE_ADV)
            SetBleMode(BLE_MODE_PERIPHERAL);
        else
            SetBleMode(BLE_MODE_ADV);
        // Printf_Error(5);
        break;
    case (KeyFlag_event | KeyFlag_times | KeyFlag_Long): //按键长按后松开
        // Printf_Error(6);
        break;
    case (KeyFlag_event | KeyFlag_times): //按键松开，非连按状态下的松开
        // Printf_Error(7);
        break;
    default:
        // Printf_Error(event);
        break;
    }
}
/*******************************************************************************
 * Function    : main
 * Brief       : 主函数
 * Parameter   :
 * Returns     :
 * Date        : 2020-04-03 17:14:47
 * Description :
 ******************************************************************************/
int main(void)
{
    u32 UnitDelay = 0x2000;

    while (UnitDelay--)
        ; // wait a while for hex programming if using the MCU stop mode, default NOT used.

    BSP_Init();                      //硬件初始化
    SetBleMode(BLE_MODE_PERIPHERAL); //设置蓝牙运行模式，广播或从机
    Uart_Send_String((u8 *)"\r\nIND:Ble Init OK!", 18);
    UnitDelay = GetSysTickCount(); //获取滴答时钟时间，1ms累计
    while (1)
    {
        if (GetBleMode() == BLE_MODE_ADV)
            BLE_TRX();
        else
            IrqMcuGotoSleepAndWakeup(); //蓝牙休眠判定，蓝牙工作方式为间断式工作

        if ((GetSysTickCount() - UnitDelay) >= 10)
        {
            // 10ms计时
            UnitDelay = GetSysTickCount();

            //按键扫描
            Key_Run();
            Fun_Uart_Run(); //串口扫描
        }
    }
}
